#ifndef FILE_PROCESSING_H
#define FILE_PROCESSING_H

/*****************************************************************************************
  @copyright  2020-2021
  @date       2021-02-17
  @author     qiaowei
  @contact    weiweiqiao@126.com
  @version    1.0
  @brief      UI界面响应类，由MainWindow类调用，根据用户的界面操作，将操作传递给不同的对象进行处理
  @history    None
******************************************************************************************/

#include <QObject>
#include <QThread>

QT_BEGIN_NAMESPACE
class File_data_division_processing;
class File_data_read_processing;
class Track_id_data_integrated;
QT_END_NAMESPACE

class File_processing : public QObject
{
    Q_OBJECT

public:
    explicit File_processing(QObject *parent = nullptr);
    ~File_processing();

public slots:
    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-05
     @brief    将process_移动到子线程中，并按照参数file_name_with_path发射信号
     @param    file_name_with_path 打开的文件名（包含文件路径）
    ***************************************************************************/
    void open_file_to_split_data(QString file_name_with_path);

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-08
     @brief    根据文件名列表，依次打开所有文件
    ***************************************************************************/
    void open_file_to_read_data(QStringList files_name_with_path);

signals:
    void sig_file_name_with_path(QString content);

    void sig_file_name_with_path_to_read_data(QStringList content);

    /***************************************************************************
     @date     2021-02-20
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    将Track_id_data_integrated*类型作为参数进行传递
     @param    Track_id_data_integrated* 传递的数据类型
    ***************************************************************************/
    void sig_integrated_data(Track_id_data_integrated* data);

private:
    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-09
     @brief    初始化信号槽
    ***************************************************************************/
    void init_connections();

    /***************************************************************************
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @date     2021-02-08
     @brief    将对象移动到子线程，启动子线程
     @param    thread 子线程
     @param    process 放入子线程的对象
    ***************************************************************************/
    void start_data_process_thread(QThread& thread, QObject* process);

private:
    /***************************************************************************
     @date     2021-02-20
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    处理File_data_division_processing*对象的线程
    ***************************************************************************/
    QThread data_division_thread_;

    /***************************************************************************
     @date     2021-02-19
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    将文件内容区分，保存到不同文件中
    ***************************************************************************/
    File_data_division_processing* division_process_;

    /***************************************************************************
     @date     2021-02-20
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    处理File_data_read_processing*对象的线程
    ***************************************************************************/
    QThread data_read_thread_;

    /***************************************************************************
     @date     2021-02-20
     @author   qiaowei
     @contact  weiweiqiao@126.com
     @version  1.0
     @brief    打开处理后数据的文件，并将数据进行处理
    ***************************************************************************/
    File_data_read_processing* read_process_;
};

#endif // FILE_PROCESSING_H
